package com.wechat.utils;

import com.wechat.pojo.WechatImageMessage;
import com.wechat.pojo.WechatTextMessage;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;


import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * @author why
 * @date 2017/12/20 0020
 */
public class XmlUtils {
    /**
     * 将对象转换成String类型的 XML
     *
     * @param obj
     * @return
     */
    public static String objectConvertToXml(Object obj) {
        // 创建输出流
        StringWriter sw = new StringWriter();
        try {
            // 利用jdk中自带的转换类实现
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
         //  System.out.println( marshaller.getProperty("mediaId"));
            // 格式化xml输出的格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                    Boolean.TRUE);
            // 将对象转换成输出流形式的xml
            marshaller.marshal(obj, sw);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return sw.toString();
    }

    /**
     * 根据节点名获取节点text
     *
     * @param xmlDoc
     * @param name
     * @return
     * @throws JDOMException
     * @throws IOException
     */
    public static String getElementTextByName(String xmlDoc, String name) {
        String text = "";
        //创建一个新的字符串
        StringReader read = new StringReader(xmlDoc);
        //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
        InputSource source = new InputSource(read);
        //创建一个新的SAXBuilder
        SAXBuilder sb = new SAXBuilder();
        try {
            //通过输入源构造一个Document
            Document doc = sb.build(source);
            //取的根元素
            Element root = doc.getRootElement();
            //System.out.println(root.getName());
            //输出根元素的名称（测试）
            //得到根元素所有子元素的集合
            List jiedian = root.getChildren();
            //获得XML中的命名空间（XML中未定义可不写）
            Namespace ns = root.getNamespace();
            Element et = null;
            // System.out.println(jiedian.size());
            for (int i = 0; i < jiedian.size(); i++) {
                et = (Element) jiedian.get(i);//循环依次得到子元素
                if (name.equals(et.getName())) {
                    text = et.getText();
                }
            /*    System.out.println(et.getChild("EventKey").getText());
                System.out.println(et.getChild("Event").getText());*/
            }
            et = (Element) jiedian.get(0);
            List zjiedian = et.getChildren();
            for (int j = 0; j < zjiedian.size(); j++) {
                Element xet = (Element) zjiedian.get(j);
            }
        } catch (JDOMException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
        return text;
    }

    public static void main(String[] args) {

    }


}
